home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.MediaTracker;
- import java.awt.image.ImageObserver;
- import java.awt.image.MemoryImageSource;
- import java.util.StringTokenizer;
- import java.util.Vector;
-
- public class ImageFader extends Applet implements Runnable {
- Image targetImage;
- Vector images;
- int[] targetPix;
- Dimension targetSize;
- Thread thread;
- String message;
- int bgColor = -16777216;
- boolean zoomIn = false;
- int speed = 1;
- String imageDir = ".";
-
- public void init() {
- this.images = new Vector();
- String var1 = ((Applet)this).getParameter("imageDir");
- if (var1 != null) {
- this.imageDir = var1;
- }
-
- var1 = ((Applet)this).getParameter("images");
- StringTokenizer var2 = new StringTokenizer(var1, "|");
-
- for(int var3 = 0; var2.hasMoreTokens(); ++var3) {
- Image var4 = ((Applet)this).getImage(((Applet)this).getDocumentBase(), this.imageDir + "/" + var2.nextToken().trim());
- ImageLoader var5 = new ImageLoader(var4, new MediaTracker(this));
- this.images.addElement(var5);
- }
-
- var1 = ((Applet)this).getParameter("bgColor");
- if (var1 != null) {
- this.bgColor = Integer.parseInt(var1, 16);
- }
-
- var1 = ((Applet)this).getParameter("zoom");
- if (var1 != null && var1.trim().equals("in")) {
- this.zoomIn = true;
- }
-
- var1 = ((Applet)this).getParameter("speed");
- if (var1 != null) {
- this.speed = Integer.parseInt(var1);
- if (this.speed <= 1) {
- this.speed = 1;
- } else if (this.speed > 10) {
- this.speed = 10;
- }
- }
-
- this.targetSize = ((Component)this).size();
- ((ImageLoader)this.images.elementAt(0)).start();
- this.message = "Loading image...";
- }
-
- public void start() {
- if (this.thread == null) {
- this.thread = new Thread(this);
- this.thread.start();
- }
-
- }
-
- public void stop() {
- if (this.thread != null) {
- this.thread.stop();
- this.thread = null;
- }
-
- }
-
- synchronized void draw(ImageLoader var1, int var2, ImageLoader var3, int var4, double var5) {
- int[] var7 = var1.getPixels();
- int var8 = var1.getWidth();
- int var9 = var1.getHeight();
- int[] var10 = var3.getPixels();
- int var11 = var3.getWidth();
- int var12 = var3.getHeight();
-
- for(int var15 = 0; var15 < this.targetSize.height; ++var15) {
- for(int var16 = 0; var16 < this.targetSize.width; ++var16) {
- int var17 = var8 / 2 + (var16 - this.targetSize.width / 2) * var8 * var2 / 200 / this.targetSize.width;
- int var18 = var9 / 2 + (var15 - this.targetSize.height / 2) * var9 * var2 / 200 / this.targetSize.height;
- int var13;
- if (var17 >= 0 && var17 < var8 && var18 >= 0 && var18 < var9) {
- var13 = var7[var17 + var18 * var8];
- } else {
- var13 = this.bgColor;
- }
-
- var17 = var11 / 2 + (var16 - this.targetSize.width / 2) * var11 * var4 / 200 / this.targetSize.width;
- var18 = var12 / 2 + (var15 - this.targetSize.height / 2) * var12 * var4 / 200 / this.targetSize.height;
- int var14;
- if (var17 >= 0 && var17 < var11 && var18 >= 0 && var18 < var12) {
- var14 = var10[var17 + var18 * var11];
- } else {
- var14 = this.bgColor;
- }
-
- int var19 = (var13 & 16711680) >> 16;
- int var20 = (var13 & '\uff00') >> 8;
- int var21 = var13 & 255;
- int var22 = (var14 & 16711680) >> 16;
- int var23 = (var14 & '\uff00') >> 8;
- int var24 = var14 & 255;
- int var25 = (int)((double)var19 * ((double)1.0F - var5) + (double)var22 * var5) << 16;
- int var26 = (int)((double)var20 * ((double)1.0F - var5) + (double)var23 * var5) << 8;
- int var27 = (int)((double)var21 * ((double)1.0F - var5) + (double)var24 * var5);
- this.targetPix[var16 + var15 * this.targetSize.width] = -16777216 + var25 + var26 + var27;
- }
- }
-
- this.targetImage.flush();
- ((Component)this).repaint();
- }
-
- void draw(ImageLoader var1, int var2) {
- this.draw(var1, var2, var1, var2, (double)1.0F);
- }
-
- public synchronized void paint(Graphics var1) {
- if (this.message != null) {
- var1.setColor(Color.black);
- var1.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
- var1.setColor(Color.cyan);
- var1.drawString(this.message, 10, 20);
- } else {
- var1.drawImage(this.targetImage, 0, 0, (ImageObserver)null);
- }
- }
-
- public void update(Graphics var1) {
- this.paint(var1);
- }
-
- public void run() {
- int var1 = 0;
- int var2 = 100;
- this.targetPix = new int[this.targetSize.width * this.targetSize.height];
- this.targetImage = ((Component)this).createImage(new MemoryImageSource(this.targetSize.width, this.targetSize.height, this.targetPix, 0, this.targetSize.width));
- ImageLoader var3 = (ImageLoader)this.images.elementAt(0);
-
- while(!var3.isLoaded()) {
- if (var3.isError()) {
- this.message = "Error: image loading...";
- ((Component)this).repaint();
- return;
- }
-
- try {
- Thread.sleep(100L);
- } catch (InterruptedException var7) {
- ((Throwable)var7).printStackTrace();
- }
- }
-
- this.message = null;
-
- while(true) {
- if (var2 >= 300) {
- var2 -= 200;
- var1 = (var1 + 1) % this.images.size();
- }
-
- var3 = (ImageLoader)this.images.elementAt(var1);
- ImageLoader var4 = (ImageLoader)this.images.elementAt((var1 + 1) % this.images.size());
- if (var4.isLoaded()) {
- if (var2 >= 200) {
- this.draw(var3, this.zoomIn ? 300 - var2 : var2, var4, this.zoomIn ? 500 - var2 : var2 - 200, (double)(var2 - 200) / (double)100.0F);
- } else {
- this.draw(var3, this.zoomIn ? 300 - var2 : var2);
- }
- } else {
- if (!((Thread)var4).isAlive()) {
- ((Thread)var4).start();
- }
-
- this.draw(var3, this.zoomIn ? 300 - var2 : var2);
- }
-
- try {
- Thread.sleep(20L);
- } catch (InterruptedException var6) {
- ((Throwable)var6).printStackTrace();
- }
-
- var2 += this.speed;
- }
- }
- }
-